package com.cykj.pos.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cykj.common.core.domain.AjaxResult;
import com.cykj.common.core.domain.entity.SysUser;
import com.cykj.pos.domain.BizMerchant;
import com.cykj.pos.domain.BizPosMachineStatusRecords;
import com.cykj.pos.domain.BizWallet;
import com.cykj.pos.domain.*;
import com.cykj.pos.domain.dto.ModifyRateDTO;
import com.cykj.pos.domain.dto.TransactionDetailsDTO;
import com.cykj.pos.domain.posone.PosOneMerchantInfo;
import com.cykj.pos.domain.vo.BizMerchParentRelated;
import com.cykj.pos.domain.vo.BizeServerCharge;
import com.cykj.pos.enums.bizstatus.BizStatusContantEnum;
import com.cykj.pos.profit.dto.*;
import com.cykj.pos.test.TestPOJO;

import java.util.List;

/**
 * 报件商户信息Service接口
 *
 * @author ningbingwu
 * @date 2021-01-11
 */
public interface IBizMerchantService extends IService<BizMerchant> {
    /**
     * 插入伙伴列表
     */
    int updataMerchant(BizMerchant bizMerchart);

    BizMerchant getMerchantparentId(Long merchName);

    void generateAllPosMerchParentRelated();
    /*查询merchId*/
    String selectMerchId(String userId);
    /*查询merchId*/
    String selectMerchIdadd(String nickName);
    /**
     * 插入伙伴列表
     */
    int insertMerchant(BizMerchant bizMerchart);
    /**
     * 查询伙伴列表
     */
    List<MerchantDTO> queryParentuser();

    List<MerchantDTO> queryParentusers();

    int selectwallet(BizWallet bizWallet);
    /**
     * 查询列表
     */
    List<BizMerchant> queryList(BizMerchant bizMerchart);

    /**
     * 构建前端显示商户树
     * @param merchants
     * @return
     */
    public List<TreeSelect> buildMerchantTreeSelect(List<BizMerchant> merchants);
    /**
     * 构建商户树
     * @param merchants
     * @return
     */
    public List<BizMerchant> buildMerchantTree(List<BizMerchant> merchants);

    /**
     * 通过商户id获取商户信息
     * @param merId
     * @return
     */
    public BizMerchant getMerchantByMerchId(Long merId);

    /**
     *通过登录用户获取商户信息
     * @return
     */
    public BizMerchant getMerchantByUserId(Long loginUser);

    /**
     * 根据商户id获取用户id
     * @param merchId
     * @return
     */
    public Long getUserIdByMerchId(Long merchId);
    /**
     * 根据商户id获取子商户（含本级商户）
     * @param mechId
     * @return
     */
    public List<BizMerchant> getAllSubNodeAndIncludeSelf(Long mechId);

    /**
     *查询所有子商户（含本级）并可根据相关条件进行查询
     * @param merchId
     * @param merchant
     * @return
     */
    public List<BizMerchant> getAllSubNodeAndIncludeSelf(Long merchId, BizMerchant merchant);

    /**
     * 当月所有新增商户数（含伙伴和普通商户）
     * @param merchId
     * @return
     */
    public Integer getMonthlyNewMerchantCounts(Long merchId);

    /**
     * 当月所有新增普通商户数（即不包含子商户的商户）
     * @param merchId
     * @return
     */
    public Integer getMonthLyNewMerchantExcludeChild(Long merchId);

    /**
     * 产生商户编号
     * @param prefix
     * @return
     */
    public String generateMerchCode(String prefix);

    /**
     *
     * @param prefix
     * @param regionCode
     * @return
     */
    public String generateMerchCode(String prefix,String regionCode);
    /**
     * 获取子商户字典列表
     * @param parentId
     * @return
     */
    public List<MerchantDict> getChildMerchartDictList(Long parentId);

    /**
     * 获取子商户列表
     * @param merchantDTO 父商户用户id
     * @return
     */
    public List<BizMerchant> getChildMerchantList(MerchantDTO merchantDTO,int pageNo,int pageSize);

    /**
     *获取报件成功或未成功的子商户数
     * @param parentId
     * @param verifyStatus 0-报件未成功，1-报件成功
     * @param thisMonth "this"-当月，"last"-上月
     * @param nickName 商户用户名称
     * @return
     */
    public Integer getChildMerchantCounts(Long parentId,String verifyStatus,String thisMonth,String nickName);

    /**
     * 获取伙伴详情
     * @param userId
     * @return
     */
    public  PartnerDTO getPartnerDetail(Long userId);

    /**
     * 获取伙伴列表
     * @param merchantDTO
     * @return
     */
    public List<PartnerDTO> getPagedPartnerList(MerchantDTO merchantDTO);

    /**
     * 小微商户（伙伴）注册
     * @param microMerchantDTO
     */
    public void microMerchantRegister(MicroMerchantDTO microMerchantDTO);

    /**
     * 邀请伙伴扫码注册
     * @param partnerInviteDTO
     */
    public BizStatusContantEnum partnerRegister(PartnerInviteDTO partnerInviteDTO);

    /**
     * 获商户银行卡信息
     * @param bankCardDTO
     * @return
     */
    public BankCardDTO getBankCardInfo(BankCardDTO bankCardDTO);

    /**
     * 银行卡变更
     * @param bankCardDTO
     * @return
     */
    public BankCardDTO alterBankCardInfo(BankCardDTO bankCardDTO);

    /**
     * 添加商户交易记录
     * @param merchTransDTO
     */
    public void addMerchantTransaction(BizMerchTransDTO merchTransDTO);

    /**
     * 撤消商户交易记录
     * @param merchTransDTO
     */
    public void cancelMerchantTransaction(BizCancelTransDTO merchTransDTO);
    /**
     * 退货商户交易记录
     * @param merchTransDTO
     */
    public void returnMerchantTransaction(BizReturnTransDTO merchTransDTO);
    /**
     *  商户下共计商户数量
     * @param merchId
     * @return
     */
    Integer getMonthlyTotalMerchantByMerId(Long merchId);

    /**
     * 当前月新增商户数
     * @param merchId
     * @return
     */
    Integer getMonthlyMyMerchantCounts(Long merchId);

    /**
     * 商户下面所有的子商户和合作伙伴
     * @param merchId
     * @return
     */
    Integer getTtotalMerchAndPartnerCounts(Long merchId);

    /**
     * 查询商户的所有伙伴信息 魏建波
     * @param merchantDTO
     * @return
     */
    List<MerchantDict> selectPagedPartnerList(MerchantDTO merchantDTO);

    /**
     * 本月新增伙伴 魏建波
     * @param merchId
     * @return
     */
    Integer getMonthlyNewPartnerCount(Long merchId);
    /**
     * 本月新增商户 魏建波
     * @param merchId
     * @return
     */
    Integer getMonthlyNewMerchCounts(Long merchId);

    /**
     * 所有商户 魏建波
     * @param merchantId
     * @return
     */
    Integer getTotalNewMerchCounts(Long merchantId);

    /**
     * 根据商户ID查询post激活数量
     * @param merchantId
     * @param month
     * @return
     */
    Integer getActivePostMachineCounts(Long merchantId, String month);

    /**
     * 获得用户下的所有商户  魏建波
     * @param merchId
     * @return
     */
    Integer getTotalMerchantByMerId(Long merchId);

    /**
     * 获得直接父合作伙伴和服务中心  魏建波
     * @param userId
     * @return
     */
    List<BizMerchant> getParentMerchByUserId(Long userId);

    /**
     * 获得首页数据  魏建波
     * @return
     */
    HomePageDataDTO getHomePageDataDTO(Long merchId,Long userId);

    /**
     * 获得本月数据信息
     * @param merchId
     * @param userId
     * @return
     */
    TransAmountDataDTO getTransAmountDataDTO(Long merchId, Long userId);

    /**
     * 通过snCode查询信息 洛
     * @param snCode
     * @return
     */
    BizPosMachineStatusRecords selectBizPosMachineStatusRecords(String snCode);

    /**
     * 通过user_id来查询
     */
    List<MerchantInfoDTO> queryMerchantInfo(MerchantDTO merchantDTO);

    /**
     * 通过user_id来查询 按照规则排序 分页
     * @param merchantDTO
     * @return
     */
    List<MerchantInfoDTO> queryOrderlyMerchantInfo(MerchantDTO merchantDTO);

    /**
     * 通过sn_code查询信息
     * @param id
     * @return
     */
    MerchantInfoDTO queryMerchantEquipmentInfo(String id);

    void updateTerminalNo(String snCode, String terminalNo);

    /**
     * 查询当前登陆人所有下级
     * @param merchantDTO
     * @return
     */
    List<MerchantDict> selectPagedPartnerListAll(MerchantDTO merchantDTO);

    /**
     * 查询伙伴详情交易额 统计图
     * @param merchantDTO
     * @return
     */
    List<PartnerDetailDTO> getPartnerAmountStatistical(MerchantDTO merchantDTO);

    /**
     * 查询伙伴详情激活数 统计图
     * @param merchantDTO
     * @return
     */
    List<PartnerDetailDTO> getPartnerMachinesStatistical(MerchantDTO merchantDTO);

    /**
     * 通过parentId查询上级
     * @param parentId
     * @return
     */
    BizMerchant getMerchantByParentId(Long parentId);

    /**
     *
     * @param userId
     * @return
     */
    SysUser getSuperior(Long userId);

    /**
     * 插入商户和上级商户的对应关系信息 biz_merch_parent_related
     * @param merchId
     */
    void generateMerchParentRelated(Long merchId);

    /**
     * app我的查询
     * @param userVo
     * @return
     */
    public HomePageDataDTO getHomePageDataDTOInfo(SysUserDTO userVo);

    /**
     * app排行榜
     * @param rankingDTO
     * @return
     */
    List<RankingDTO> queryPartnerRankingByTime(RankingDTO rankingDTO);

    /**
     * 查询所有上级
     * @param bizMerchant
     * @return
     */
    TestPOJO queryAllParent(BizMerchant bizMerchant);

    /**
     * vue商户转移查询伙伴列表所有
     * @param bizMerchant
     * @return
     */
    List<BizMerchant> queryListUi(BizMerchant bizMerchant);

    /**
     * Vue伙伴转移
     * @param bizMerchart
     * @return
     */
    int updateByIdVue(BizMerchant bizMerchart);

    /**
     * 通过姓名查询特殊皇冠比例
     * @param merchName
     * @return
     */
    BizMerchant getMerchantByName(String merchName);

    /**
     * VUE划拨伙伴列表
     * @return
     */
    List<com.cykj.pos.domain.dto.MerchantDTO> personList();

    List<com.cykj.pos.domain.dto.MerchantDTO> getALlMerchant();

    /**
     * 盛付通交易记录
     * @param shengFuTongTradeDTO
     * @return
     */
    boolean addMerchantTransactionBySft(ShengFuTongTradeDTO shengFuTongTradeDTO);

    /**
     * 获得
     * @param merchantDTO
     * @return
     */
    List<PosOneMerchantInfo> getPosOneMerchantInfo(MerchantDTO merchantDTO);

    void modifyRate(ModifyRateDTO modifyRateDTO);

    /**
     *  xxl根据sn查询伙伴
     * @param snCode
     * @return
     */
    BizMerchant selectBizMerchantBySN(String snCode);

    /**
     * 更改设备为 未绑定
     * @param snCode
     */
    void updataMerchantStatus(String snCode);


    void generateAllPosMerchantRelatedProcedure();

    BizMerchantReturnMoney selectBizServiceCharge(Long userId);

    /**
     * 查询流量费和服务费回显
     * @return
     */
    List<BizeServerCharge> echoServerBizServiceCharge();

    /**
     * 修改流量费和服务费
     * @param modifyRateDTO
     */
    void updataserverRate(ModifyRateDTO modifyRateDTO);

    Long selectServerId(Long userId);

    /**
     * 回显我的伙伴费率
     * @param modifyRateDTO
     * @return
     */
    ModifyRateDTO echoRate(ModifyRateDTO modifyRateDTO);

    /**
     * 查询机构
     * @return
     * @param outmer
     */
    List<BizOrganization> selectBizOrganization(String outmer);

    /**
     * 查询商户是否签约
     * @param bizMerchant
     * @return
     */
    BizMerchantReceiver selectBizMerchantReceiver(BizMerchant bizMerchant);

    BizMerchantReceiver selectBizMerchantReceiverTypeB(BizMerchant bizMerchant);

    List<BizTransactionAmountEntity> getSomeData();

    void saveBackMerchant(String merchantCode);
    List<BizWallet> getCdList(BizWallet bizWallet);

    List<BizMerchParentRelated> getMerchantListByMerchId(Long merchId);

    AjaxResult withdrawalInterval(BizMerchant bizMerchant);

    List<Long> getMerchantByNameLike(String merchName);

    List<BizMerchant> getAllMerchants();

    List<BizMerchant> executeMerchList(BizMerchant bizMerchant);

    List<com.cykj.pos.domain.dto.MerchantDTO> getPersonList();

    List<BizWalletNew> queryWalletDetail(BizMerchant bizMerchant);

}
